﻿using System;
using System.Collections.Generic;
using System.Linq;

using PortalIntranet.DatabaseComponents;
using PortalIntranet.DatabaseComponents.Seguranca;

namespace PortalIntranet.BusinessComponents.Seguranca
{
	public class UsuariosBll
	{
		public static Usuario Obter(string email)
		{
			using (var contexto = new IntranetContexto())
			{
				return contexto.Usuarios
					.Include("Departamento")
					.Include("Grupo")
					.Where(c => c.Email == email
						&& !c.Desativado
						&& !c.Excluido)
					.FirstOrDefault();
			}
		}

		public static Usuario ValidarLogin(string email, string senha)
		{
			using (var contexto = new IntranetContexto())
			{
				return contexto.Usuarios
					.Include("Departamento")
					.Include("Grupo")
					.Where(c => c.Email == email
						&& c.Senha == senha
						&& !c.Desativado
						&& !c.Excluido)
					.FirstOrDefault();
			}
		}

		public static void AtualizarUltimoAcesso(int id)
		{
			using (var contexto = new IntranetContexto())
			{
				var usuario = contexto.Usuarios.Find(id);

				if (usuario != null)
				{
					usuario.UltimoAcesso = DateTime.Now;
					contexto.SaveChanges();
				}
			}
		}

		public static List<Usuario> ListarTodos(int empresa)
		{
			using (var contexto = new IntranetContexto())
			{
				return contexto.Usuarios
					.Include("Departamento")
					.Where(c => c.Departamento.EmpresaId == empresa
						&& !c.Desativado
						&& !c.Excluido)
					.OrderBy(o => o.Nome)
					.ToList();
			}
		}

		public static List<Usuario> ListarAniversariantes(int empresa, int mes)
		{
			using (var contexto = new IntranetContexto())
			{
				return contexto.Usuarios
					.Include("Departamento")
					.Where(c => c.Departamento.EmpresaId == empresa
						&& (c.Aniversario != null && c.Aniversario.Value.Month == mes)
						&& !c.Desativado
						&& !c.Excluido)
					.OrderBy(o => o.Nome)
					.ToList();
			}
		}
	}
}
